package io.gimo.study.design_pattern.proxy.dynamic_proxy.jdk_proxy;

import com.gimo.proxy.staticProxy.Car;
import com.gimo.proxy.staticProxy.Moveable;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;


/**
 * JDK动态代理使用步骤：
 * 1.创建一个实现了InvocationHandler接口的类。
 * 2.创建被代理的类及接口。
 * 3.调用代理类的方法。
 * @author GimoXie
 *
 */
public class Test {

	public static void main(String[] args) {
		Car car = new Car();
		InvocationHandler timeHandler = new TimeHandler(car);
		Class<?> clazz = car.getClass();
		/**
		 * loader:类加载器
		 * interfaces：实现接口
		 * h：处理器
		 */
		Moveable m = (Moveable) Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), timeHandler);
		
		InvocationHandler logHandler = new LogHandler(m);
		Moveable m2 = (Moveable) Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), logHandler);
		m2.move();
	}

}
